"""
学习目标
使用面向对象思想完成数据读取和处理
基于面向对象思想,重新认知第三方库的使用(如 pyecharts)

"""
"""
面向对象数据分析案例主业务逻辑代码
实现步骤
1.设计一个类,可以完成数据的封装  (文件 数据相关的类.py 里)

2.设计一个抽象类,定义文件读取的相关功能,并使用子类实现具体功能 
(直接创建相关功能不行吗,干嘛多此一举. 其实可以但是我们这里有2份不同文件格式的数据,需要不同的逻辑去实现数据的读取. )

3.读取文件,生产数据对象
(数据相关的类.py 里已经完成,返回值是 列表[类_对象])

4.进行数据需求的逻辑计算(计算每一天的销售额)
(这里开始做)

5.通过pyecharts进行图形绘制

D:/python黑马/资料数据/2011年1月销售数据.txt     (csv格式)
D:/python黑马/资料数据/2011年2月销售数据JSON.txt  (json格式)

"""
# 把2个文件里的相关功能,到过来  由于是同一个文件夹里所以不用全路径
from 数据相关的类 import 类_记录
from 文件相关的类 import 类_文件读取器, csv格式文件读取, json格式文件读取
# 导入绘图包
from pyecharts.charts import Bar
# 导入 系统配置 标签配置项
from pyecharts.options import *
# LabelOpts
# 创建文件对象
一月份销售文件 = csv格式文件读取("D:/python黑马/资料数据/2011年1月销售数据.txt")
二月份销售文件 = json格式文件读取("D:/python黑马/资料数据/2011年2月销售数据JSON.txt")

# 读取文件里的数据
一月份销售数据 = 一月份销售文件.数据读取()  # type: list[类_记录]
二月份销售数据 = 二月份销售文件.数据读取()  # type: list[类_记录]

# 合并成一个列表,方便读取计算   就是拼接列表
总销售数据 = 一月份销售数据 + 二月份销售数据  # type: list[类_记录]

"""
这里说明下:
要求是把每日的销售金额,汇总求和.记录下来
文件数据是每一个订单,一个金额
"""
销售字典 = {}
每日销售总额 = 0  # 计算统计每一日的销售总额
for 类对象 in 总销售数据:  # 这里的元素是 类的对象,所以下面的操作要用 对象操作

        try:
                销售字典[类对象.订单日期] += 类对象.订单金额   # 没有密钥当然报错  这里的运算操作,要找相应的密钥的
        except KeyError:
                销售字典[类对象.订单日期] = 类对象.订单金额    # 建立密钥并赋值


# 准备柱状图 X和Y轴心国 数据

# X轴 销售日期
X轴 = []
for key in 销售字典.keys():
    X轴.append(key)


# print(type(X轴))

# Y轴 每日销售总金额
Y轴 = []
for key in 销售字典:
    Y轴.append(销售字典[key])

# print(Y轴)

# 绘图
柱状图 = Bar()
柱状图.add_xaxis(X轴)
柱状图.add_yaxis("销售额", Y轴, label_opts=LabelOpts(position="top"))  # 默认数字标签在里面,我们把标签放上面

# 图全局设置
柱状图.set_global_opts(
    # 标题选项  pos是位置 left是左边 (这里我们居中)  bottom是底部 (底部百分之1)
    title_opts=TitleOpts(title="每日销售总金额", pos_left="center", pos_bottom="1%"),
    # 图例选项 这里是显示
    legend_opts=LegendOpts(is_show=True),
    # 工具箱选项 这里是显示
    toolbox_opts=ToolboxOpts(is_show=True),
    # 视觉映射 这里是显示
    # visualmap_opts=VisualMapOpts(is_show=True),
                    )
柱状图.render('每日销售额总汇.html')

